package com.example.ssyinitlearn.userDetailsServiceImpl;

import org.springframework.security.core.userdetails.User;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
import org.springframework.security.provisioning.InMemoryUserDetailsManager;
import org.springframework.stereotype.Service;

/**
 * 在Service层继承的一个 InMemoryUserDetailsManager(其是就是一个UserDetailsService)
 * 由于 InMemoryUserDetailsManager本身已经实现了 UserDetailsService且具备了很多方法，完全可以直接沿用
 */
@Service
public class InMemoryServiceImpl_1 extends InMemoryUserDetailsManager {
    /**
     * 构造方法，只需要当构造时，调用父类(其实就是InMemoryUserDetailsManager)的方法添加进去一个UserDetails即可
     */
    public InMemoryServiceImpl_1() {
        super.createUser(User.builder().
                username("inMemory_Service").
                password("{noop}123").
                roles("user").
                build());
    }

    /**
     * 你如果愿意的话还可以在这接着覆写父类中的其他方法，添加点自己的东西，啥时候不想写了直接一个 super. 即可
     * 这里就是自定义了一个异常输出
     * 如果用户不存在直接抛出自定义异常，否则接着用 super 的内容。
     *
     * @param username
     * @return
     * @throws UsernameNotFoundException
     */
    @Override
    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
        if (!username.equals("inMemory_Service")) {
            throw new UsernameNotFoundException("InMemoryServiceImpl_1 未找到用户" + username);
        }
        return super.loadUserByUsername(username);
    }
}
